1. Technical Field
The present invention generally relates to the field of electronic product availability checks, and addresses computational performance issues in such availability checks.
2. Background Information
In modern industries, supply chain management has become an important tool in the planning and organization of business processes. ATP (Availability-to-Promise) checks, also known as availability checks, allow to ensure that a company can provide a requested product at a requested time in a requested quantity. The ATP check allows to determine if a requirement can be confirmed. Among ATP checks, there is known a product availability check, which carries out the availability check against what is referred to as the ATP quantity. In other words, the product availability check calculates the available amount of a product at a certain time. The ATP quantity is calculated from stock, planned receipts (production orders, purchase orders, planned orders and so on), and planned requirements (sales orders, deliveries, reservations and so on).
Product availability checks use ATP time series as input data. ATP time series represent incoming and outgoing movements (receipts and issues) for specific products. In an ATP time series, the receipt, requirements and stock elements are managed in aggregated (time-based) form. ATP time series are managed separately for each planning object and updated when changes are made to this planning object. Typically, aggregation occurs on a daily basis, but other periods of aggregation are conceivable, as well. ATP time series thus represent the current planning situation for the planning object for a series of points of time or time periods (buckets).
In a known solution implemented, e.g., in software packages SAP R/3 and SAP APO by SAP AG, Walldorf, and enabling a characteristics-based product availability check, the individual ATP time series includes a key consisting of category, sublocation, version and one or more valuated characteristics. This key uniquely identifies the particular ATP time series. Category refers to the particular type of stock, receipts and requirements that are to be considered in the product availability check. By choosing one or more categories, the user can define the scope of the availability check. Created production orders and released production orders are but two examples of categories. Sublocation and version correspond respectively to the storage location in a plant and the batch of the product. Characteristics may refer to features such as color, size, weight and length of the product. For more information on product availability checks and ATP time series, it is referred to Helmut Bartsch, Peter Bickenbach: “Supply Chain Management mit SAP APO—Supply-Chain-Modelle mit dem Advanced Planner & Optimizer 3.1”, SAP Press, 2nd edition, 2002, ISBN No. 3-89842-111-2, the content of which is herewith expressly incorporated by reference.
In the following, procedures of the conventionally known product availability check are discussed in more detail by way of example with reference to FIG. 4. The product availability check is done on various levels such as plant level, sublocation level, version level, sublocation & version level, version & characteristics level, etc. The total result is the minimum of the results on the levels. For each level check, a separate ATP stack is filled based on the input ATP time series data. The input data is exploded with respect to sublocation, version and characteristics and stored in a linear structure with indexed access before it is filled into the stacks. The linear structure is herein referred to as exploded bucket array.
On the left-hand side of FIG. 4, three exemplary data sets 10, 12, 14 are depicted. Each of the data sets 10, 12, 14 represents an aggregated planning situation for a specific product with regard to a particular time bucket (e.g., day or shift) and order category. For example, the data set 10 indicates that in a category C1, which in the example considered may stand for a receipt order of a first type, an aggregated quantity q1 of the product having version V and characteristics CK will be received at a time t1 in a sublocation S. The data set 12 indicates that with regard to a category C2, which, e.g., may be a receipt order of another type, an aggregated quantity q2 of the product having version V and characteristics CK will be received in sublocation S at a time t2. Further, the data set 14 indicates that with regard to a category C3, which in the present example represents an issue order, an aggregated quantity q5 of the product will have to be delivered at a time t5, regardless of the product's version, characteristics and storage location.
In the example, it is assumed that the time t1 is earlier than t2, which in turn is earlier than t5. Also, it is assumed that the sum of the quantities q1 and q2 is greater than the quantity q5, with q5 greater than q2.
The data sets 10, 12, 14 are the input data to the product availability check and may also be referred to as first data sets in the context of the present invention. Each of the data sets 10, 12, 14 constitutes, or is part of, a different ATP time series. While in the example considered, data for a single bucket only is illustrated in relation to each ATP time series, a person of ordinary skills in the art will appreciate that each ATP time series may, and typically will, contain data for a plurality of buckets so as to reflect a sequence or series of planning situations.
The parameters: category, sublocation, version and characteristics together form a key (hereinafter also referred to as a first key) that is included in each data set 10, 12, 14. This key uniquely identifies the corresponding ATP time series. The various parameters form the elements of the key. They specify product-related conditions. As for the data set 10, the key element “category” has the value “C1”, the key element “sublocation” has the value “S”, the key element “version” has the value “V”, and the key element “characteristics” has the value “CK”. Thus, (C1, S, V, CK) is the key of the ATP time series associated with the data set 10. Similarly, (C2, S, V, CK) is the key of the ATP time series associated with the data set 12. As for the data set 14, the key element “category” has the value “C3”, and the remaining key elements “sublocation”, “version” and “characteristics” all have the value “-” indicating that no particular sublocation, version and characteristics are required for the product. Consequently, (C3, -, -, -) is the key of the ATP time series associated with the data set 14.
In the context of the present invention, the key element “category” can be viewed as a primary key element, and the other key elements “sublocation”, “version” and “characteristics” can be viewed as secondary key elements. It will be readily appreciated by one of ordinary skills in the art that the primary and secondary key elements are not limited to those described above and may include any number and type of parameters.
According to the known method of performing product availability checks, the input ATP time series data is exploded with respect to the secondary key elements sublocation, version and characteristics. The exploded data is stored in a linear array, the exploded bucket array. Bucket arrays are created separately for issues, receipts and stock. Thus, three bucket arrays may be created, one for receipt orders, one for issue orders, and one for stock. In the middle portion of FIG. 4, an exemplary exploded bucket array 16 is depicted that has been created from the receipt order data sets 10 and 12. The array 16 includes a plurality of array fields. An index I is assigned to each array field of the array 16. Through the indices I, the array fields of the array 16 and their content can be accessed. Below the bucket array 16, another bucket array 18 is indicated that has been created from the issue order data set 14. In the example considered, the bucket array 18 includes a single array field, which can be likewise accessed through an index J.
The data explosion involves generating, for each input data set, an intermediate data set for each selection of any number of secondary key elements of the respective input data set. The intermediate data sets include the same category, quantity and time as the input data set from which they are generated. For example, the data set 10 having (S, V, CK) as its secondary key elements can be exploded into eight intermediate data sets. A first intermediate data set of the input data set 10 can be generated to include none of the secondary key elements of the input data set 10, i.e., (-, -, -, t1, C1, q1). A second intermediate data set of the input data set 10 can be generated to include one of the secondary key elements of the input data set 10, e.g., the secondary key element S, resulting in the intermediate data set (S, -, -, t1, C1, q1). A third intermediate data set of the input data set 10 can be generated to include another one of the secondary key elements of the input data set 10, e.g., the secondary key element V, yielding (-, V, -, t1, C1, q1) as the corresponding intermediate data set. Similarly, a fourth intermediate data set of the input data set 10 can be generated as (-, -, CK, t1, C1, q1). Further intermediate data sets of the input data set 10 can be generated to include a combination of two of the secondary key elements, i.e., V and CK, S and CK, and S and V. A last intermediate data set can be generated to include all of the secondary key elements of the input data set 10, i.e., S, V and CK. One will easily appreciate that such last intermediate data set corresponds to the input data set 10 itself.
Thus, the secondary key elements sublocation, version and characteristics of the input data sets define a certain level, and the explosion process can be viewed as involving the generation of intermediate data sets for the same and all higher (more coarse) levels.
As can be easily seen, the data set 12 can likewise be exploded into eight intermediate data sets. The sixteen intermediate data sets that can be generated in the above fashion from the data sets 10, 12 are stored in respective array fields in the bucket array 16. As stated earlier, the array fields of the bucket array 16 are assigned an index I to enable to individually access them.
As for the data set 14, this data set can be mapped onto a single intermediate data set only. The secondary key elements of this input data set define the uppermost level, i.e., the level of the plant itself with no consideration of the parameters sublocation, version and characteristics. As the data set 14 specifies an issue, it is exploded into a bucket array different from the bucket array 16, which is reserved for receipt orders. In the example depicted in FIG. 4, the bucket array 18 receives the single intermediate data set that can be generated from the data set 14. Of course, depending on the content and number of issue orders, the exploded bucket array 18 may require a plurality of array fields to receive the exploded information. Similarly to the bucket array 16, each array field of the bucket array 18 is assigned an index J to allow access to its content.
In a subsequent step of the known method of performing product availability checks, the content of the exploded bucket arrays 16, 18 is used to generate what is referred to herein as ATP stacks. These are data structures that are created and temporarily stored for the purpose of the product availability check. In the ATP stacks, the information from the exploded bucket arrays is aggregated with respect to the categories. Separate ATP stacks are created for different levels. Each ATP stack is filled on the basis of the intermediate data sets in the arrays that belong to the same level as the respective stack. Intermediate data sets that represent issues are subtracted from intermediate data sets that represent stock or receipts. In this manner, the time-dependent free amount of the product or material at a particular level is obtained independent of the category.
On the right-hand side of FIG. 4, eight exemplary ATP stacks 20, 22, 24, 26, 28, 30, 32, 34 are depicted that have been created on the basis of the content of the exploded bucket arrays 16, 18. The ATP stacks 20-34 include a key that consists of the secondary key elements, and further include quantity information in relation to a series of time buckets. For example, the key of the ATP stack 20 is (-, -, -) indicating that this stack is for the uppermost level. In other words, the ATP stack 20 provides time-dependent information on the free amount of the product regardless of its sublocation, version and characteristics. The key of the ATP stack 34, on the other hand, is (S, V, CK) indicating that the stack is for the lowermost level. To put it in different terms, the ATP stack 34 provides time-dependent information on the free amount of the product having version V and characteristics CK in sublocation S. The ATP stacks 22-32 provide similar information for intermediate levels.
The principles of aggregating exploded ATP time series data to fill ATP stacks are well-known to a person versed in the art and need not be described in detail herein. To give one example, filling the ATP stack 20 in FIG. 4 requires aggregating the intermediate data sets indexed 1 and 2 of the bucket array 16 and the intermediate data set indexed 1 of the bucket array 18. The intermediate data set indexed 1 of the bucket array 16 indicates that the quantity q1 is received at time t1, and the intermediate data set indexed 2 of the bucket array 16 indicates that the quantity q2 will be received at time t2. However, the intermediate data set indexed 1 of the bucket array 18 indicates that the quantity q5 will have to be delivered at time t5. Thus, the free (available) amount at time t1 is calculated as q1+q2−q5=q6. At time t2, the aggregated quantity at the highest (plant) level is zero.
The ATP stacks are also referred to herein as second data sets.
In the known method of performing product availability checks, indices to array fields of receipt and stock bucket arrays are kept and stored in the ATP stacks. In the example of FIG. 4, since no input data related to stock is provided and consequently no exploded bucket array for stock is created, only the index I to the receipt bucket array 16 is kept in the ATP stacks 20-34. The indices in the ATP stacks allow to disaggregate the information in the ATP stacks to recover category-dependent information. Through the inclusion of the indices, which can be viewed as pointers to the array fields of the exploded bucket array(s), information about the categories is preserved in the ATP stacks.
With the conventional method of performing product availability checks, the following problem may be encountered. In many industries, products are manufactured and sold in many different versions, sizes, colors, shapes, etc. For example, a steel producing company may manufacture rolls of band steel in a number of different lengths. The length of the roll represents a characteristic of the product. Therefore, ATP time series data have to be generated and maintained for each length. More generally, if large numbers of product characteristics and/or many product versions and/or many sublocations are involved in the product availability check, the aggregation in the ATP time series is small, resulting in a large number of input data sets to the product availability check.
An exploded bucket array has to be a data structure with direct access via an index. Typically, the exploded bucket array is sorted primarily by the secondary key elements, i.e., sublocation, version and characteristics. Building up the exploded bucket array then frequently involves the addition of new array fields in intermediate portions of the array. To keep the index consistent, the array has to be copied every time a new entry is added. The permanent copying and resizing of the array during its build-up from the input data sets results in a N*N runtime behaviour (N being the number of input data sets involved in the check). The growing direct-access array therefore requires considerable computing capacity and time. If the number of input data sets increases, the runtime may exceed beyond acceptable levels. This makes the conventional method of performing product availability checks unattractive for cases where large amounts of characteristics and/or many versions and/or many sublocations occur.
Accordingly, there is a need for systems, methods, and articles of manufacture that reduce the computing capacity and time required for performing electronic product availability checks.